#ifndef _OGSOLVERBBPV3_H_
#define _OGSOLVERBBPV3_H_

#include "ogsolverBBP.h"

#include "gsupplyLinkProblem.h"
#include "gsupplyLinkSolution.h"
#include "ogsupplyLinkSolutionPartial.h"


/**
 * A BBP solver : starts with jobs with last due dates
 *
 * Dans cette version 3 de la BBP, on demarre avec les jobs reordonnes dans le sens des dates dues croissantes. Mais
 * contrairement a l'exploration brutale de la version 2, cette fois on ne considere pas n'importe quel numero de batch.
 * Pour chaque job, on choisit de le rajouter soit dans un batch deja existant dont la capacite residuel est suffisante
 * pour stocker le nouveau job, soit dans un nouveau batch.
 *
 * Le nouveau batch est ordonnance avant les autres batchs deja crees.
 *
 * ATTENTION : Pour que cette solution soit optimale, sachant que l'on
 * part d'un probleme pour lequel les jobs sont classes par date due croissante, il est egalement necessaire que le cout de stockage
 * de tous les jobs soient identiques. Dans le cas contraire, la solution ainsi construite n'est plus certaine d'etre optimale.
 */
class OGSolverBBPv3 : public OGSolverBBP {

    public:
        OGSolverBBPv3(GSupplyLinkProblem& pb) ;
        ~OGSolverBBPv3() ;

        virtual void solveInit() ;
        virtual void solveMain() ;
        virtual void solveEnd() ;

        virtual void depthFirstSearchSingle(int, int, OGSupplyLinkSolutionPartial&, vector<double>&) ;

//        virtual bool newDeliveryBatchIsPossible(int, int) ;
} ;

#endif
